const Joi = require('joi');

// 最低生活保障申请数据验证模式
const mlaApplicationSchema = Joi.object({
  // 用户ID
  userId: Joi.number().integer().positive().required()
    .messages({
      'number.base': '用户ID必须是正整数',
      'number.integer': '用户ID必须是整数',
      'number.positive': '用户ID必须是正数',
      'any.required': '用户ID是必填项'
    }),

  // 申请人姓名
  applicantName: Joi.string().min(2).max(50).required()
    .messages({
      'string.base': '申请人姓名必须是字符串',
      'string.min': '申请人姓名至少2个字符',
      'string.max': '申请人姓名最多50个字符',
      'any.required': '申请人姓名是必填项'
    }),

  // 身份证号
  applicantIdCard: Joi.string().pattern(/^[1-9]\d{5}(18|19|20)\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/).required()
    .messages({
      'string.base': '身份证号必须是字符串',
      'string.pattern.base': '身份证号格式不正确',
      'any.required': '身份证号是必填项'
    }),

  // 联系电话
  applicantPhone: Joi.string().pattern(/^1[3-9]\d{9}$/).required()
    .messages({
      'string.base': '联系电话必须是字符串',
      'string.pattern.base': '联系电话格式不正确',
      'any.required': '联系电话是必填项'
    }),

  // 家庭住址
  applicantAddress: Joi.string().min(5).max(200).required()
    .messages({
      'string.base': '家庭住址必须是字符串',
      'string.min': '家庭住址至少5个字符',
      'string.max': '家庭住址最多200个字符',
      'any.required': '家庭住址是必填项'
    }),

  // 家庭人口数
  familySize: Joi.number().integer().min(1).max(20).required()
    .messages({
      'number.base': '家庭人口数必须是数字',
      'number.integer': '家庭人口数必须是整数',
      'number.min': '家庭人口数至少1人',
      'number.max': '家庭人口数最多20人',
      'any.required': '家庭人口数是必填项'
    }),

  // 家庭月收入
  monthlyIncome: Joi.number().min(0).max(999999.99).required()
    .messages({
      'number.base': '家庭月收入必须是数字',
      'number.min': '家庭月收入不能为负数',
      'number.max': '家庭月收入不能超过999999.99元',
      'any.required': '家庭月收入是必填项'
    }),

  // 主要收入来源
  incomeSource: Joi.string().valid(
    '务农收入', '打工收入', '经商收入', '退休金', 
    '低保补助', '其他收入', '无固定收入'
  ).required()
    .messages({
      'string.base': '主要收入来源必须是字符串',
      'any.only': '主要收入来源选项不正确',
      'any.required': '主要收入来源是必填项'
    }),

  // 困难原因
  difficultyReason: Joi.string().min(10).max(500).required()
    .messages({
      'string.base': '困难原因必须是字符串',
      'string.min': '困难原因至少10个字符',
      'string.max': '困难原因最多500个字符',
      'any.required': '困难原因是必填项'
    }),

  // 身份证照片
  idCardImage: Joi.string().uri().required()
    .messages({
      'string.base': '身份证照片必须是字符串',
      'string.uri': '身份证照片URL格式不正确',
      'any.required': '身份证照片是必填项'
    }),

  // 户口簿照片
  householdImage: Joi.string().uri().required()
    .messages({
      'string.base': '户口簿照片必须是字符串',
      'string.uri': '户口簿照片URL格式不正确',
      'any.required': '户口簿照片是必填项'
    }),

  // 收入证明照片（可选）
  incomeProofImage: Joi.string().uri().allow('').optional()
    .messages({
      'string.base': '收入证明照片必须是字符串',
      'string.uri': '收入证明照片URL格式不正确'
    })
});

// 审核操作数据验证模式
const mlaReviewSchema = Joi.object({
  // 申请ID
  applicationId: Joi.number().integer().positive().required()
    .messages({
      'number.base': '申请ID必须是正整数',
      'number.integer': '申请ID必须是整数',
      'number.positive': '申请ID必须是正数',
      'any.required': '申请ID是必填项'
    }),

  // 操作类型
  action: Joi.string().valid('approve', 'reject').required()
    .messages({
      'string.base': '操作类型必须是字符串',
      'any.only': '操作类型只能是approve或reject',
      'any.required': '操作类型是必填项'
    }),

  // 审核意见
  comment: Joi.string().min(5).max(500).required()
    .messages({
      'string.base': '审核意见必须是字符串',
      'string.min': '审核意见至少5个字符',
      'string.max': '审核意见最多500个字符',
      'any.required': '审核意见是必填项'
    }),

  // 操作人ID
  operatorId: Joi.number().integer().positive().required()
    .messages({
      'number.base': '操作人ID必须是正整数',
      'number.integer': '操作人ID必须是整数',
      'number.positive': '操作人ID必须是正数',
      'any.required': '操作人ID是必填项'
    }),

  // 操作人姓名
  operatorName: Joi.string().min(2).max(50).required()
    .messages({
      'string.base': '操作人姓名必须是字符串',
      'string.min': '操作人姓名至少2个字符',
      'string.max': '操作人姓名最多50个字符',
      'any.required': '操作人姓名是必填项'
    })
});

module.exports = {
  mlaApplicationSchema,
  mlaReviewSchema
};
